#include "CeldaEditor.h"
#include "TableroEditor.h"
#include <string>

CeldaEditor::CeldaEditor() {
	dato = new DatoCelda();
	set_visible_window(false);
	imagen = new Gtk::Image();
	setImagen("imagenes/vacia.png");
	add(*imagen);
	imagen->show();
	show();

	set_events(Gdk::BUTTON_PRESS_MASK);
	signal_button_press_event().connect(
			sigc::mem_fun(*this, &CeldaEditor::on_eventbox_press));

	setVacia(true);
}

bool CeldaEditor::estaVacia() {
	return dato->getVacia();
}

void CeldaEditor::setImgVaciaSelected(std::string dirImagen) {
	imgVaciaSelected = dirImagen;
}

void CeldaEditor::setVacia(bool valor) {
	dato->setVacia(valor);
}

bool CeldaEditor::getVacia() {
	return dato->getVacia();
}

void CeldaEditor::setImgLlenaSelected(std::string dirImagen) {
	imgLlenaSelected = dirImagen;
}

void CeldaEditor::setImgVacia(std::string dirImagen) {
	imgVacia = dirImagen;
}

void CeldaEditor::setImgLlena(std::string dirImagen) {
	imgLlena = dirImagen;
}

void CeldaEditor::setImagen(std::string dirImagen) {
	imagen->set(dirImagen);
}

void CeldaEditor::setNumCelda(int num) {
	dato->setNumCelda(num);
}

int CeldaEditor::getNumCelda() {
	return dato->getNumCelda();
}

bool CeldaEditor::getEsCelda() {
	return esCelda;
}

void CeldaEditor::setContenedor(TableroEditor* tab) {
	this->contenedor = tab;
}

DatoCelda* CeldaEditor::getDatos() {
	return dato;
}

void CeldaEditor::setEsCelda(bool valor) {
	esCelda = valor;
}

Json::Value CeldaEditor::ToJson() {
	return dato->ToJson();
}

void CeldaEditor::actualizarCelda(){
	if (getVacia() == false)
		setImagen(imgLlena);
	}

void CeldaEditor::desactivarSeleccion() {
	if (getVacia() == true)
		setImagen(imgVacia);

	if (getVacia() == false)
		setImagen(imgLlena);
}

bool CeldaEditor::on_eventbox_press(GdkEventButton* button) {
	
	if ((contenedor->activoSeleccion() == false) & (esCelda)) {
		
		if (getVacia() == true) {
				setImagen(imgLlena);
				setVacia(false);}
			else{
				setImagen(imgVacia);
				setVacia(true);
			}	
		}
	
	
	if (contenedor->activoSeleccion() == true) {
		if (getVacia() == true)
			setImagen(imgVaciaSelected);

		if (getVacia() == false)
			setImagen(imgLlenaSelected);

		contenedor->setCeldaSelected(this);
		contenedor->refrescarTablero();
	}
	imagen->show();
	
	contenedor->setProbSeleccionada();

	return true;
}

CeldaEditor::~CeldaEditor() {
delete 	dato;
}

